;(function(){
  angular.module('services.omdisplay.recAbnormal',[])
    .factory('RecAbnormalService',recAbnormalService);
  /**
   * 对账差异分析service
   * @return  该service实例
   */
  function recAbnormalService(){
    //日期格式数组
    var FORMATARRAY = [
      undefined,'yyyy-MM-dd',undefined,'yyyy-MM-01','yyyy-01-01','yyyy-01-01'
    ];
    //季度名称数组
    var seasons = [undefined,'第一季度','第二季度','第三季度','第四季度']; 

    return{
      FORMATARRAY:FORMATARRAY,
      initDate:initDate,
      getDuration:getDuration
    };
    
    /**
     * 初始化日期参数
     * @param   timeTypeCode 账期对应代码
     * @return {[type]}          [description]
     */
    function initDate(timeTypeCode){
      //当前browser系统时间
      var now = new Date();
      //临时日期参数用于返回
      var date = {};
      //年
      var year = now.getFullYear();
      //月
      var month = now.getMonth();
      //日  默认比当前日期要早一天
      var day = now.getDate()-1;
      //根据账期代码对应初始化日期参数
      switch(timeTypeCode){
        //账期为月
        case '3':
          date.startTime = new Date(year,month);
          date.endTime = new Date(year,month);
          break;
        //账期为年
        case '5':
          date.startTime = year;
          date.endTime = year;
          break;
        //默认账期处理
        default:
          date.startTime = new Date(year,month,day);
          date.endTime = new Date(year,month,day);
      }
      return date;
    }
    
    /**
     * 生成账期区间
     * @param   param 查询参数
     * @return        账期区间
     */
    function getDuration(param){
      //账期区间
      var duration = '';
      //所选开始时间,结束时间是否一致
      var timeIsNotSame = false;
      //如果账期为季则另外处理季度判断所选时间是否一致
      if(param.timeType === '4'){
        timeIsNotSame = (param.startTime !== param.endTime)||(param.startQuarter !== param.endQuarter); 
      }else{
        timeIsNotSame = (param.startTime !== param.endTime);
      }
      //根据账期判断
      switch(param.timeType){
        //年
        case '5' :
          duration = timeIsNotSame?
            (param.startTime.substr(0,4)+'_'+param.endTime.substr(0,4))
            :(param.startTime.substr(0,4)); 
          break;
        //季
        case '4' :
          duration = timeIsNotSame?
            (param.startTime.substr(0,4)+seasons[param.startQuarter]+'_'+param.endTime.substr(0,4)+seasons[param.endQuarter])
            :(param.startTime.substr(0,4)+seasons[param.startQuarter]);
          break;
        //月
        case '3' :
          duration = timeIsNotSame?
            (param.startTime.substr(0,7).replace(/-/g,'')+'_'+param.endTime.substr(0,7).replace(/-/g,''))
            :(param.startTime.substr(0,7).replace(/-/g,''));
          break;
        //日
        case '1' :
          duration = timeIsNotSame?
            (param.startTime.replace(/-/g,'')+'_'+param.endTime.replace(/-/g,''))
            :(param.startTime.replace(/-/g,''));
          break;
      }
      return duration;
    }
  }
})();